{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.random.uniform(-3, 3, size=100)\n",
    "X = x.reshape(-1, 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, size=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x7f829d5c7310>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "lin_reg = LinearRegression()\n",
    "lin_reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_predict = lin_reg.predict(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f8296de1ed0>]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAD4CAYAAADFAawfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAds0lEQVR4nO3df3QdZZkH8O/TNJS0KKmHKJAC6apbaWWh3aBIVlfAtYilhK67VlHXxWPFPa60h42kqLQInha7Auvq8VgFdRUqSDEFChaX4tmlAnLTtEAp5XDkV8MP49IIpQFuk2f/SG5yc+/M3Jk778y8M/P9nNNzmjs3c9/768k7z/u87yuqCiIisteUpBtARETeGKiJiCzHQE1EZDkGaiIiyzFQExFZbmoUJz3iiCO0ra0tilMTEWVSb2/vn1S1xelYJIG6ra0NhUIhilMTEWWSiDztdoypDyIiyzFQExFZjoGaiMhyDNRERJZjoCYishwDNRGR5SIpzyMiypOevn6s27IHzw0O4ejmJnQtnIPO+a3Gzs9ATUQUQk9fP1be8jCGisMAgP7BIay85WEAMBasmfogIgph3ZY940G6ZKg4jHVb9hh7DPaoiYgqBEllPDc4FOj2erBHTURUppTK6B8cgmIildHT1+94/6ObmwLdXg8GaiKiMkFTGV0L56CpsWHSbU2NDehaOMdYm5j6ICIqEzSVUUqJsOqDiCgilfno5umN2HegWHU/r1RG5/xWo4G5EgM1EeWWU2ld4xRBY4OgOKzj9zOdygiKOWoiyi2nfHRxRDHjkKlobW6CAGhtbsKaJSdE2mOuhT1qIsott7zzn4eK2LHqwzG3xh171ESUW3GU1pnAQE1EuRVHaZ0JTH0QUW7FUVpnAgM1EeVa1KV1JjD1QURkOfaoiYgqRL2+dFAM1EREZeJYXzoopj6IiMrEsb50UAzURERl4lhfOiimPoiIMJGXVpfjSU6CYaAmotyrzEtXSnoSjK/Uh4isEJFdIvKIiGwQkUOjbhgRUVyc8tIlqViUSURaAXwZwFxVHRKRmwAsBfCTiNtGRBSLfo/887bu02NsiTO/g4lTATSJyFQA0wE8F12TiIji1SAS6Pa41QzUqtoP4N8BPAPgeQB/VtW7Ku8nIstEpCAihYGBAfMtJSKKyLA6DyG63R63moFaRGYCOAfAbABHA5ghIp+qvJ+qrlfVdlVtb2lpMd9SIqKItLpUdLjdHjc/qY8PAXhSVQdUtQjgFgCnRtssIqL42L7cqZ/yvGcAnCIi0wEMATgDQCHSVhERxcj25U5rBmpVfUBEbgawHcBBAH0A1kfdMCKiONm83KmvCS+qugrAqojbQkREDrjWBxGR5RioiYgsx0BNRGQ5BmoiIssxUBMRWY6BmojIclyPmogyxbaNaU1goCaizLBxY1oTmPogosywcWNaExioiSgzbNyY1gQGaiLKDLcNaJPcmNYEBmoiygzblyutFwcTiSgzbF+utF4M1ESUKTYvV1ovpj6IiCzHQE1EZDkGaiIiyzFHTUS5lKap5gzURJQ7XlPNAfuqRhioiSh33Kaar751F14/OGLdWiHMURNR7rhNKR8cKlq5VggDNRHlTtAp5UmvFcJATUS54zbVfOb0Rsf7J71WCHPURJQ7blPNAUwaZATsWCuEgZqIUq+eUjuvqeas+iAiMsj0ri42rhXCHDURpVpWd3Upx0BNRKmW1V1dyjFQE1GqZXVXl3IM1ESUalnd1aUcBxOJKNWyuqtLOQZqIko9Gys1TGKgJqKa0rQkaBb5ylGLSLOI3Cwij4nIbhF5X9QNIyI7lOqU+weHoJioU+7p60+6abnht0f9HwB+raofE5FDAEyPsE1EZBGvOuUgverKXvlp72rBPY8NsJfuQ81ALSJvBvABAJ8FAFV9A8Ab0TaLiGxhok7Zafbgz+9/Zvy4Les+28pP6uMvAAwA+LGI9InIj0RkRuWdRGSZiBREpDAwMGC8oUSUDBN1yk698kqpnk34+uvAddcBL78cyen9BOqpABYA+L6qzgfwKoDuyjup6npVbVfV9paWFsPNJKKkmKhT9tv7Tt1swhtvBESAQw8FPvc54JJLInkYP4F6L4C9qvrA2M83YzRwE1EOdM5vxZolJ6C1uQkCoLW5CWuWnBAoReG3952K2YSPPgq8/e2jAXrp0onbzzsP+M53InnImjlqVX1BRJ4VkTmqugfAGQAejaQ1RGSlsHXKXQvnVK3zXMnq2YSvvAJccAFwww2Tb3/HO4BNm4C5cyN9eL9VH/8K4Pqxio8/APjn6JpERFnjNHswiqoPo/XeqqPpjB//uPrYhg2Te9MRE1U1ftL29nYtFArGz0tE5KaysgQY7aUHTdPg1FOB++6rvn35cmDtWmDaNAOtrSYivara7nSMizIRUSaEWpe6q2s05yxSHaQfeWS0d3311ZEF6Vo4hZyIEmUqXRG43vvFF4Ejj3Q+NnMm8NJLgdsQFQZqIkqM1zZaQLAV8Y5ubkK/Q1CuqiQRcW/Q/v3AjKppIoljoCai2FT2ng+8cdAxXXHZbbvwWnEk0D6ITpUl45UkM2YABw44N+orXwGuvNLAs4sOAzURxcKp9+xm34Fi1W211heprCw5c/AJfP8Hy4ErXB4kgkKKqDBQE1Es/Ewjr6XWzMXO+a3oXDDL/Q4jI96pD0sxUBORI9NrUPudHt7U2IBpU6dgcKi6V+06c9Er+G7aBCxe7OuxbcXyPCKqEsUa1G5BtrmpsWp6+urF82qvL3L++RMldU5UR/+lPEgD7FETkQNTa1CXcxvsW714nus5q3r0f9ns3XtOUd45CAZqIqpiYg3qSkE2oa1Mu2xbeQaw0uXEvb3AgmyvE8dATURVfNckB+RncadS2mX3FR/xPllGe89OmKMmoiom1qCuyyOPoHPBLPcgXco75yhIA+xRE1GZ8pTD4U2NOLRxCgYPFKPf09Aj7zxv+U14ddp0CIAno3l06zFQExGA6gkpg0NFNDU24OqPnxRNgPYIzpuO/1tcuLhr0m2p2FQgIgzURATAvdLjopt2YsWNO8ysIX3ppcDll7sfVx3/gwGnqeA5xUBNRADcKzqGx/LBde8crgpM8RgOq5gtGKQ6JC8YqIkIgHulhxe32uqevn7vqdxXXQWsWOF6OOzWX1nDQE2UU5W1yqe9qwUbe/sDr8cxqSc+1jPudLtzRbWG6WnqWcVATZRDTivZbeztx9//det4DnqKyHjaw8uJst9zYLDt4tsBjE4P31ajDb5SKTnEQE2UQ24Dh/c8NoBt3acDcN6DsNxTVy5yPf85n/42dh49efCvMgcexTT1rGKgJsoht1x0eTB1GtTbtvIM7xOromPtVl+zGqOYpp5VnJlIlDM9ff1wS1RUBtPO+a3YNm0nnrxykXuQrpgt6HdWo1tddJ7rpd2wR02UM+u27IFT5lmAycG0zr0FnXrip72rBeu27Bmvx+5aOMd76yyaRDSCOfPt7e1aKBSMn5coDlmvRJjdvdkxUAPeeWcAda2x4ZTrbmpswJolJwBgvXSJiPSqarvTMfaoicrkoRKhsl76ge99Bm/b/5L7L4TszHkNGm7rPj0zr2uUGKiJyuShEqFr4Rxc+svteGiNx84nBuudOWgYHgcTicpkPqiIoHPBLOcg3dXluIRo2G25OGgYHgM1UZlMBpXSvoK19hb81rccD3tdZfiR2NrWGcJATVQmM0Hld7/zF5x95J/DXmV0zm/FmiUnVG1gazKV1NPXj461WzG7ezM61m4NtQmvjZijJqowbeqU8R7kzOmNWHW2++ar1vEqqXvwQaDdsajAk4ltuaJcZCkPA8DsURONKX3hB4eK47e9VhxJsEU++U1t1BGkAfuvMsKmZtKAgZpoTKq+8Oeeayy1UUscqYswMj8AjACpDxFpAFAA0K+qNariidInFV94r9TGa68B06ZF8rBeqYukJwhFtWO6TYL0qC8EsDuqhhAlzdqKD7+pjYiCtJewpXsm2J6aMcFXoBaRWQA+CuBH0TaHKDlWfeH9BmeP1EYclRA2pItsT82Y4Df1cQ2ArwB4k9sdRGQZgGUAcOyxx4ZvGVHMEt+rb3AQmDnT/XiAfHNclRC2pIuyvnVXzUAtIosA/FFVe0Xkg273U9X1ANYDo4syGWshUYwS+cJ75Z2//nXgG98IfMq4psLnIT9sAz896g4Ai0XkLACHAniziPxcVT8VbdOIMswrOAN1r1JXuhpw+23TPV0uVRqPmjlqVV2pqrNUtQ3AUgBbGaSJ6rBhQ2QldZWDem5M93TzkB+2AWcmEkXNq/f86KPA8ceHfginVEelqHq6Wc8P2yBQoFbV3wL4bSQtIcqSCFIbXrxSGgLkflH+tOPMRCJT5syJbbZgJbeURkOtPxiUCgzURGGoTgTnxx+vPj48HFlwLudUAw4Aw6q+JqJkffW5tGOOOkWSnqpLZbx6qocfPloTbYif972yBnyKCIYr/ji4leflYfW5tGOgTgl+mSwQc94ZCPa+lw/qze7e7Hg+p1x2HrYfSzumPlLChqm6ufTUU4nlnYH63/cg65bYMruQ3DFQpwS/TDErBefZs6uPffe7voNz2Nxvve97kHVLrF2MisYx9ZESnKobA8OpDRPpqnrfd7d1SwCgY+3WSbdxdqH92KNOCatWdsuSVasiS224pS0uummn7x52mPe9c34rtnWfjifXfhTbuk8HAMclSQFwdqHl2KNOicRXdssar97zc88BRx0V+iHc0hOlaozyQAk4v7fl73v/4BAaRCblqIO8/1757m3dp/OzZDEG6hThVN2QYq7acEtblBsqDmP1rbvw+sER1xRJ6T0Pm0bhOEd6MfVBADI84cHAAvz1cpuEUmlwqFizssNE1Q8HDdOLgZqs2E7JqOHhREvqSipXlgs6nbu8p2uiN8xxjvRioKbs1GiXgvPU6ozezuPejZ7teyMPzpXKB/S+/Y8nOgbKmdMbHX+3vKdrojfMJUnTizlqSnfuskYvte3i28f/35TwTE6vkrla5XGmSug4zpFOuQvUXC+jWupqtAsF4OST3Y+romPt1qrnZMO0aK9A6fW5DFP1w898+lkXqKP8UPX09aPrlztRHJkoj+r65c7x43n9MKdmwoNX7/lXvwI6O8d/TNtVgp+ebj29Ya4Rkw1WBeqoP1Srb901HqRLiiOKS255CArJ7YfZ6hrtOkvqUneVEBEuuJQNVg0mRj2oNThUdLz9QHEkG4NpIVTOYkv0S/z5z4eu2mCFw6i0XVmQM6t61LZ9qPhhjplX7/mVV4DDDvN9KquvEmLEK4tssCpQR/2hmjm9EfsOVPeqRZw7Z/wwOzM6jhDhbEHbKhySGNRLzfgDebIq9RH15eqqs+ehsWFyYGhsEJz33mN5meyTkckxCc4WTEpSk4pYO50NohF8Gdrb27VQKNT1u7V6HWF7JW6/X3774U2NEAEGDxRD9Xy82trT14/Lbts13sNvbmrE6sXzrP8COZW9AaMBoLRCm6NXX/VOXWQoKDup+3Wj3BCRXlVtdzpmVeoD8L5cNVEV4nb+0u2mKk+8zgMAXTfvRHF4IjgNDhXHSwVtDtaBxxG8Uhvnnw9ce62BVtnP7+vGmmdyYl2g9hJHqZGpx6hVwVIepEuKI2p92ZSvcYQE9ha0nZ/XLWgngUE9P6zKUdcSR1WIqcfwOo/XuWyvNHEbRzi/+GQseee0rvLnZ/wlSHlq5hbSIk+p6lHHUWpk6jFqncdtnWLbK00qy96evHKR633vueHXOO0TC409dppn2fkpFwzSSeBElnxJVaCOo9TI1GPUOk9ljhoAGqdIKipNOhfMQqfH8dJCSK1PN2KbwcdNe3CqVS4YpJNg25wDipa1gdor/xZlXs7UY/g5T2XVx6ITj8K6LXuw4sYdseYcfeU6P/MZ4Gc/cz1H+Sp1JaaDRtaDU5BOAiey5IuVgbrWJW6UwcvkAI1XWyuPJXVZX/NxvQYGi0Vg6lR0rN0KxBA0sh6cgnQSOJElX6wM1Eld4iaZA03qOTs97u4rPgJc4fILb30r8OKLk26KK2gkEZzirqzw2xHhFPl8sTJQx32JW/oyOvXW4sqBJnVZXzr/Ux6DggA8qzXqCRr1BMC4g5Ptg5e1gjrL97LDykAd5yXu13oexvX3PwOvorE4cqCJXNbv2+dZtVEenMv/mDWIYFgVrWVf/iApqTABMM71O9I8eGn7HxkKpmYdtYgcIyL3iMhuEdklIhdG3ago1vxwqr/t6euvGaSBeHKgsS7LWap3fstbqg4tX3QRjv/anaP7C44pr9kFgGGd2HihntrdtOzRmObBy7S8xuSPnx71QQAXqep2EXkTgF4R+Y2qPhpVo0xf4rr1LqZNnVIzSMc1QBP5ZX2N2YIda+4ef9w1FY/r9KUvqaeHmZYA6HaVM0UEPX39VvdM0/Iakz81A7WqPg/g+bH/vyIiuwG0AogsUANmL3HdehduwaekNea8nvHL+ttuAxYvdj9eltrwqneu9eUO+uWPO81Tb67WafASGL2iiDONUE/7s14hkzeBppCLSBuA+QAeiKIxUQkaSATANR8/KfmdTupVSm04BOnFK28aTWsEmMpd68sd9MsfZ5onzFTr0hKhDQ5XI3GlEeptP3e4yRbfgVpEDgOwEcByVX3Z4fgyESmISGFgYMBkG0NzCyQzpzdWfZgFwHmnHJu+AF1jjee2i29H28W346GR6YHzyk5f+pJ6vvxxrpEcNlfbOb8VIy5/1NyWATCp3vZzHeps8VX1ISKNGA3S16vqLU73UdX1ANYDo+tRG2uhAW71t6vOngcgxbWoZ58N3F49I3CcquM6yEHzyuX5c7eqj6Diqt4wkat1SyMIEHmuOkz7bdvhhupXM1CLiAC4FsBuVb0q+iaZV2ugLqkPc125U1VgiseF0MjIpF61qUGltH7pTeRquxbOwYobd1QNPCsQeakec80E+Et9dAD4NIDTRWTH2L+zIm6XcVbtso06co+ltIZTkF66dGIJ0YrUh9sXOi9fdKe0TWOD4NXXD/peKrVzfqtrdVDUVRTMNRPgr+rjXoxe5ZFBviZTGFiAP+9rQlReTTVPb8T+1w5icGh0MSw/E0F6+vrH0z2Vov6Dx6niBFg6MzEP3HpiI8886x2gAy68zy/65LRNx9qtVTvRe+XsS1c+TkE6zhr7PL1fVI2BOiGVuUfPtTa2bgVOO63ux+IXfULQnL3bZJ8GEVZRUGwYqBPStXAOOhfM8r5TDvcWjFrQwTnXKx9VBmmKjTV7Jtq2F15k7bnrLkDEPUgb2luQnAUdnMv7YCzZwYpAbdtGnZG0p1S1sdBhD8FXX2VwjknQiSCsuiAbWJH6sG05SWPt8RoUPOssYPPmOluYb2HXWQ6Ss+dgLNnAikBt20pf9bSnFDw+1fN9fPGBm91PnkCvOUsLyMe5znLl63b1x09K7etG6WZFoLZt9lXQ9vQUnkHnyce578ydYEoj7gXko/6jENfVFxfeJ5tYkaO2LQ/ouz1jeefOk4+rOse/nNONjjV3+wrSpYHLtu7NePvKO9BmcAAzzgXk4xhriOvqiwvvk02s6FHblgf0bM/73w/ce6/r77ZdPLFIkvgIHpU9t8rdU8rbU48400puwW31rbuMvZdxXX3F+bplKTVF0bAiUAP2TcqY1J4XXgCOOsr1vh1r7q47eJjePcWpDXGlldyC2OBQ0dgqc3FNiY/rdWOKhfywIvVhrVJJnUOQft8Xf4KONXejZ/veUKmbWmsah+3BxZlW8gpiplIGca2zHNfrxhQL+WFNj9oahx8OvFy1LwIAYN+8E3HquWsnvlhjvZ81S07AmiUnBL587enrhwCe+zaG7cHFmVbqWjgHy2/c4XjMZMogjqsvp8WcVIEVN+7Aui17jL2GtlU8kZ0YqAFg925g7lz342N540Vrt2LIZRH+epZOXbdlj2eQNtWDiyut1Dm/FZfdtqtq0SMgnTP5Sq9blOkJ2yqeyE75Tn2UUhtOQfrgwarZgqZ7P16/l9atk1adPc+qCh4TokxP2FbxRHbKX6D+2Mfc9xbcuHEiODdU7xFoet0Ht99rbW6yYnODemRxr74o0xNZfL3IvHykPn7/e+C973U+dsopwH33+TqN6YqDrC7qb1sFT1hRpyey9nqRedkN1MPDwFSPp1fHbEHTA3O21Y+Ts6z+QaX0EI1genN7e7sWCgXj5/XlyCOBF190PvbCC8Db3hZveygTOCmFoiYivara7nQsGz3qDRuAT37S+dg11wAXXhhveyhzmJ6gJKU3UL/88mjNsxuu7Zw57NVSXqUvUB9zDLB3r/Ox114Dpk2Ltz05Fmfg5FRryrN0lOf98IcTJXWVQfrOOydK6hikYxP3rjycak15Zm+g3rdvIjgvWzb52Be+MBGczzwzmfblXNyBk1OtKc/sS3389KfAZz/rfGxkxHt7K4pN3IGTU60pz+zqUW/aVB2kn356ovfMIB07t93Y496dm1OtKc/sCtSnngqsXAk8/vhEcD722KRblVteeei4AyenWlOeZW/CCxnTsXarY7qhtBYJy+WIzMn+hBeKRK08NCeBEMXDrtQHWSXuPDQROWOgJlccwCOyA1MfOVBvLpmr+xHZgYE648JOvWYemih5vlIfInKmiOwRkSdEpDvqRpE5nHpNlH41A7WINAD4HoCPAJgL4BMi4rETLNmEU6+J0s9Pj/o9AJ5Q1T+o6hsAfgHgnGibRaawcoMo/fwE6lYAz5b9vHfstklEZJmIFESkMDAwYKp9FBIrN4jSz0+gdlpgo2o6o6quV9V2VW1vaWkJ3zIyglOvidLPT9XHXgDHlP08C8Bz0TSHosDKDaJ089OjfhDAO0VktogcAmApgFujbRYREZXU7FGr6kER+RKALQAaAFynqrsibxkREQHwOeFFVe8AcEfEbSEiIgecmUiR43KoROEwUFOkuHs4UXhcPY8ixSnsROExUFOkOIWdKDwGaooUp7AThcdATZHiFHai8DiYSJHi5gNE4TFQU+Q4hZ0oHKY+iIgsx0BNRGQ5BmoiIssxUBMRWY6BmojIcqJatVlL+JOKDAB4OuCvHQHgT8Ybk5ysPR8ge88pa88HyN5zytrzAdyf03Gq6rg9ViSBuh4iUlDV9qTbYUrWng+QveeUtecDZO85Ze35APU9J6Y+iIgsx0BNRGQ5mwL1+qQbYFjWng+QveeUtecDZO85Ze35AHU8J2ty1ERE5MymHjURETlgoCYispxVgVpELheRh0Rkh4jcJSJHJ92mMERknYg8NvacfiUizUm3KSwR+QcR2SUiIyKS2rIpETlTRPaIyBMi0p10e8ISketE5I8i8kjSbTFBRI4RkXtEZPfY5+3CpNsUlogcKiK/F5GdY8/pMt+/a1OOWkTerKovj/3/ywDmquoFCTerbiLyYQBbVfWgiFwJAKp6ccLNCkVEjgcwAuAHAP5NVQsJNykwEWkA8DiAvwOwF8CDAD6hqo8m2rAQROQDAPYD+C9VfXfS7QlLRI4CcJSqbheRNwHoBdCZ8vdIAMxQ1f0i0gjgXgAXqur9tX7Xqh51KUiPmQHAnr8idVDVu1T14NiP9wOYlWR7TFDV3aqa9p1p3wPgCVX9g6q+AeAXAM5JuE2hqOr/AHgp6XaYoqrPq+r2sf+/AmA3gFQvaq6j9o/92Dj2z1eMsypQA4CIfFNEngVwHoBLk26PQecDuDPpRhCA0S/8s2U/70XKg0CWiUgbgPkAHki2JeGJSIOI7ADwRwC/UVVfzyn2QC0i/y0ijzj8OwcAVPWrqnoMgOsBfCnu9gVV6/mM3eerAA5i9DlZz89zSjlxuC3VV29ZJSKHAdgIYHnFFXcqqeqwqp6E0avr94iIrzRV7FtxqeqHfN71BgCbAayKsDmh1Xo+IvJPABYBOENtGhDwEOA9Squ9AI4p+3kWgOcSagu5GMvjbgRwvareknR7TFLVQRH5LYAzAdQcALYq9SEi7yz7cTGAx5JqiwkiciaAiwEsVtUDSbeHxj0I4J0iMltEDgGwFMCtCbeJyowNvF0LYLeqXpV0e0wQkZZS5ZeINAH4EHzGONuqPjYCmIPRqoKnAVygqv3Jtqp+IvIEgGkA/m/spvvTXMUCACJyLoD/BNACYBDADlVdmGyrghORswBcA6ABwHWq+s2EmxSKiGwA8EGMLqH5IoBVqnptoo0KQUT+BsD/AngYo/EAAC5R1TuSa1U4IvJXAH6K0c/cFAA3qeo3fP2uTYGaiIiqWZX6ICKiagzURESWY6AmIrIcAzURkeUYqImILMdATURkOQZqIiLL/T9+JHh3zLmaIgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x, y)\n",
    "plt.plot(x, y_predict, color= 'r')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看出使用线性回归算法来拟合的效果不是很理想，我们可以尝试使用多项式回归来进行拟合。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 解决方案  添加一个特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 1)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(X**2).shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "X2 = np.hstack([X, X**2])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, 2)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X2.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "lin_reg2 = LinearRegression()\n",
    "lin_reg2.fit(X2, y)\n",
    "y_predict2 = lin_reg2.predict(X2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f8296c09a50>]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x, y)\n",
    "plt.plot(np.sort(x), y_predict2[np.argsort(x)], color='r') # 如果不进行排序，会出现一条十分缠绕的折线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1.00496967, 0.45084325])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_reg2.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.26742893157719"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_reg.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
